package com.github.houbb.id.core;

import com.github.houbb.heaven.support.instance.impl.Instances;
import com.github.houbb.id.api.Id;

/**
 * Id 工具類
 * @author binbin.hou
 * @since 0.0.1
 */
public final class Ids {

    private Ids(){}

    /**
     * 获取常量
     * @param id 固定标识
     * @return 实现
     * @since 0.0.1
     */
    public static Id stable(final String id) {
        return new IdStable(id);
    }

    /**
     * uuid32
     * @return 实现
     * @since 0.0.1
     */
    public static Id uuid32() {
        return Instances.singleton(UUID32.class);
    }

    /**
     * uuid8
     * @return 实现
     * @since 0.0.1
     */
    public static Id uuid8() {
        return Instances.singleton(UUID8.class);
    }

    /**
     * 随机
     * @param prefix 前缀
     * @param randomLength 随机长度
     * @return 实现
     * @since 0.0.1
     */
    public static Id random(final String prefix,
                            final int randomLength) {
        return new IdRandom(prefix, randomLength);
    }

    /**
     * 雪花
     * @return 实现
     * @since 0.0.1
     */
    public static Id snowflake() {
        return Instances.singleton(IdSnowFlake.class);
    }

    /**
     * 本地内存实现
     * @return 实现
     * @since 0.0.2
     */
    public static Id local() {
        return Instances.singleton(IdLocal.class);
    }

    /**
     * uuid 的数字形式
     * @return 实现
     * @since 0.0.3
     */
    public static Id uuidNum() {
        return Instances.singleton(UUIDNum.class);
    }

    /**
     * 便于人类阅读的 id 生成策略
     * @return 实现
     * @since 0.0.4
     */
    public static Id human() {
        return Instances.singleton(IdHuman.class);
    }

}

